﻿using System;
using System.Windows.Forms;
using Entidades;
using Logica;
using Logica.Comandos.AseguradoraCommand;
using Logica.Comandos.Cliente;
using Logica.Comandos.Poliza;
using Logica.Comandos.Ramo;
using SchadenEscritorio.Contratos;

namespace SchadenEscritorio.Presentadores
{
    public class PresentadorEditarCliente: PresentadorBuscarCliente
    {
        #region Atributos

        private IContratoEditarCliente _vista;
        private Comando _comando;
        private Cliente _datos;

        #endregion

        #region Constructor
        public PresentadorEditarCliente( IContratoEditarCliente vista )
        {
            _vista = vista;
            VistaBuscar = _vista;
        }

        #endregion

        #region Metodos
        /// <summary>
        /// Metodo que carga los datos de las aseguradoras en el combobox
        /// </summary>
        private void CargarAseguradoras()
        {
            Comando comando = FComandos.ComandoAseguradora().ConsultarTodos();

            foreach (Aseguradora aseguradora in ((ComandoObtenerTodasAseguradoras)comando).Ejecutar(""))
            {
                _vista.Aseguradora.Items.Add(aseguradora);
            }
            _vista.Aseguradora.DisplayMember = "Nombre";
            _vista.Aseguradora.ValueMember = "Id";
        }

        /// <summary>
        /// llena el combobox de los ramos
        /// </summary>
        private void CargarRamos()
        {
            Comando comando = FComandos.ComandoRamo().ConsultarTodos();

            _vista.Ramo.Items.Clear();

            foreach (Ramo ramo in ((ComandoObtenerRamos)comando).Ejecutar(""))
            {
                _vista.Ramo.Items.Add(ramo);
            }
            _vista.Ramo.DisplayMember = "Nombre";
            _vista.Ramo.ValueMember = "Id";
        }
        private void DetallePoliza(object sender, DataGridViewCellEventArgs e)
        {
            if(e.ColumnIndex == 5)
            {
                String titulo = "OJO";
                MessageBox.Show(_vista.ListaPolizas.Rows[e.RowIndex].Cells[0].Value.ToString(), titulo, MessageBoxButtons.OK);

            }
        }
        public void AgregarPoliza ()
        {
            int fila = _vista.ListaPolizas.Rows.Add();
            _vista.ListaPolizas.Rows[fila].Cells[0].Value = -1;
            _vista.ListaPolizas.Rows[fila].Cells[1].Value = ((Aseguradora)_vista.Aseguradora.SelectedItem).Nombre;
            _vista.ListaPolizas.Rows[fila].Cells[2].Value = ((Aseguradora)_vista.Aseguradora.SelectedItem).Id;
            if(_vista.Ramo.SelectedIndex == -1)
            {
                _vista.ListaPolizas.Rows[fila].Cells[3].Value = _vista.Ramo.SelectedText;
                _vista.ListaPolizas.Rows[fila].Cells[4].Value = -1;
            }
            else
            {
                _vista.ListaPolizas.Rows[fila].Cells[3].Value = ((Ramo)_vista.Ramo.SelectedItem).Nombre;
                _vista.ListaPolizas.Rows[fila].Cells[4].Value = ((Ramo)_vista.Ramo.SelectedItem).Id;
            }
            _vista.ListaPolizas.Rows[fila].Cells[5].Value = _vista.NumeroPoliza.Text;
            _vista.ListaPolizas.CellClick += DetallePoliza;

            _vista.Aseguradora.SelectedIndex = -1;
            _vista.Ramo.SelectedIndex = -1;
            _vista.NumeroPoliza.Text = "";
        }
        /// <summary>
        /// inicializa el datagridview con los datos de la polizas
        /// </summary>
        private void CargarPolizas()
        {
            _comando = FComandos.ComandoPoliza().Consultar();
            foreach (Poliza poliza in ((ComandoObtenerPolizaCliente)_comando).Ejecutar(_datos.Id))
            {
                int fila = _vista.ListaPolizas.Rows.Add();
                _vista.ListaPolizas.Rows[fila].Cells[0].Value = poliza.Id;
                _vista.ListaPolizas.Rows[fila].Cells[1].Value = poliza.Aseguradora.Nombre;
                _vista.ListaPolizas.Rows[fila].Cells[2].Value = poliza.Aseguradora.Id;
                _vista.ListaPolizas.Rows[fila].Cells[3].Value = poliza.Ramo.Nombre;
                _vista.ListaPolizas.Rows[fila].Cells[4].Value = poliza.Ramo.Id;
                _vista.ListaPolizas.Rows[fila].Cells[5].Value = poliza.Numero;
                _vista.ListaPolizas.CellClick += DetallePoliza; 
            }
        }
        /// <summary>
        /// inicializa todos los compentes dado los datos del cliente
        /// </summary>
        /// <param name="id"></param>
        public void VerDetalle(int id)
        {
            _vista.ListaPolizas.Rows.Clear();
            foreach (Cliente cliente in Lista)
            {
                if(cliente.Id == id)
                {
                    _datos = cliente;
                    break;
                }
            }
            _vista.LetraRif.Items.Clear();
            _vista.LetraRif.Items.Add('V');
            _vista.LetraRif.Items.Add('E');
            _vista.LetraRif.Items.Add('J');
            _vista.LetraRif.Items.Add('P');
            _vista.LetraRif.Items.Add('G');
            VistaBuscar.PanelBusqueda.Visible = false;
            _vista.Nombre.Text = _datos.Nombre;
            _vista.Rif.Text = _datos.Rif.ToString().ToUpper();
            _vista.Telefono.Text = _datos.Telefono.ToString();
            _vista.Telefono1.Text = _datos.Telefono1.ToString();
            _vista.Telefono2.Text = _datos.Telefono2.ToString();
            _vista.LetraRif.SelectedText = _datos.LetraRif.ToString().ToUpper();
            CargarPolizas();
            CargarRamos();
            CargarAseguradoras();
        }
        public void Guardar()
        {
            string titulo = "Culminado";
            string mensaje = "Cliente Editado con EXITO!!!";
            _datos.Nombre = _vista.Nombre.Text;
            _datos.Rif = Convert.ToInt64(_vista.Rif.Text);
            _datos.LetraRif = (char) _vista.LetraRif.SelectedItem;
            _datos.Telefono = _vista.Telefono.Text;
            _datos.Telefono1 = _vista.Telefono1.Text;
            _datos.Telefono2 = _vista.Telefono2.Text;

            _comando = FComandos.ComandoCliente().Editar();

            ((ComandoEditarCliente) _comando).Ejecutar(_datos);

            foreach (DataGridViewRow row in _vista.ListaPolizas.Rows)
            {
                if( (int)row.Cells[0].Value == -1)
                {
                    Poliza miPoliza = FabricaEntidades.ObtenerPoliza();
                    miPoliza.Aseguradora.Id = (int) row.Cells[2].Value;
                    miPoliza.Ramo.Id = (int) row.Cells[4].Value;
                    miPoliza.Numero = (string) row.Cells[5].Value;
                    miPoliza.Cliente.Id = _datos.Id;
                    if( miPoliza.Ramo.Id == -1)
                    {
                        Ramo ramo = FabricaEntidades.ObtenerRamo();
                        ramo.Id = -1;
                        ramo.Nombre = (string) row.Cells[3].Value;
                        ramo.Tipo = "ramo";
                        _comando = FComandos.ComandoRamo().Agregar();
                        miPoliza.Ramo.Id = ((ComandoAgregarRamo) _comando).Ejecutar(ramo);
                    }
                    _comando = FComandos.ComandoPoliza().Agregar();
                    ((ComandoAgregarPoliza) _comando).Ejecutar(miPoliza);
                }
            }
            MessageBox.Show(mensaje, titulo, MessageBoxButtons.OK);
            _vista.PanelBusqueda.Visible = true;

        }
        #endregion
    }
}
